home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / scripts / mod / modpost.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.8 KB  |  158 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <sys/stat.h>
  7. #include <sys/mman.h>
  8. #include <fcntl.h>
  9. #include <unistd.h>
  10. #include <elf.h>
  11.  
  12. #include "elfconfig.h"
  13.  
  14. #if KERNEL_ELFCLASS == ELFCLASS32
  15.  
  16. #define Elf_Ehdr    Elf32_Ehdr
  17. #define Elf_Shdr    Elf32_Shdr
  18. #define Elf_Sym     Elf32_Sym
  19. #define Elf_Addr    Elf32_Addr
  20. #define Elf_Sword   Elf64_Sword
  21. #define Elf_Section Elf32_Half
  22. #define ELF_ST_BIND ELF32_ST_BIND
  23. #define ELF_ST_TYPE ELF32_ST_TYPE
  24.  
  25. #define Elf_Rel     Elf32_Rel
  26. #define Elf_Rela    Elf32_Rela
  27. #define ELF_R_SYM   ELF32_R_SYM
  28. #define ELF_R_TYPE  ELF32_R_TYPE
  29. #else
  30.  
  31. #define Elf_Ehdr    Elf64_Ehdr
  32. #define Elf_Shdr    Elf64_Shdr
  33. #define Elf_Sym     Elf64_Sym
  34. #define Elf_Addr    Elf64_Addr
  35. #define Elf_Sword   Elf64_Sxword
  36. #define Elf_Section Elf64_Half
  37. #define ELF_ST_BIND ELF64_ST_BIND
  38. #define ELF_ST_TYPE ELF64_ST_TYPE
  39.  
  40. #define Elf_Rel     Elf64_Rel
  41. #define Elf_Rela    Elf64_Rela
  42. #define ELF_R_SYM   ELF64_R_SYM
  43. #define ELF_R_TYPE  ELF64_R_TYPE
  44. #endif
  45.  
  46. /* The 64-bit MIPS ELF ABI uses an unusual reloc format. */
  47. typedef struct
  48. {
  49.     Elf32_Word    r_sym;    /* Symbol index */
  50.     unsigned char r_ssym;    /* Special symbol for 2nd relocation */
  51.     unsigned char r_type3;    /* 3rd relocation type */
  52.     unsigned char r_type2;    /* 2nd relocation type */
  53.     unsigned char r_type1;    /* 1st relocation type */
  54. } _Elf64_Mips_R_Info;
  55.  
  56. typedef union
  57. {
  58.     Elf64_Xword        r_info_number;
  59.     _Elf64_Mips_R_Info    r_info_fields;
  60. } _Elf64_Mips_R_Info_union;
  61.  
  62. #define ELF64_MIPS_R_SYM(i) \
  63.   ((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_sym)
  64.  
  65. #define ELF64_MIPS_R_TYPE(i) \
  66.   ((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_type1)
  67.  
  68. #if KERNEL_ELFDATA != HOST_ELFDATA
  69.  
  70. static inline void __endian(const void *src, void *dest, unsigned int size)
  71. {
  72.     unsigned int i;
  73.     for (i = 0; i < size; i++)
  74.         ((unsigned char*)dest)[i] = ((unsigned char*)src)[size - i-1];
  75. }
  76.  
  77. #define TO_NATIVE(x)                        \
  78. ({                                \
  79.     typeof(x) __x;                        \
  80.     __endian(&(x), &(__x), sizeof(__x));            \
  81.     __x;                            \
  82. })
  83.  
  84. #else /* endianness matches */
  85.  
  86. #define TO_NATIVE(x) (x)
  87.  
  88. #endif
  89.  
  90. #define NOFAIL(ptr)   do_nofail((ptr), #ptr)
  91. void *do_nofail(void *ptr, const char *expr);
  92.  
  93. struct buffer {
  94.     char *p;
  95.     int pos;
  96.     int size;
  97. };
  98.  
  99. void __attribute__((format(printf, 2, 3)))
  100. buf_printf(struct buffer *buf, const char *fmt, ...);
  101.  
  102. void
  103. buf_write(struct buffer *buf, const char *s, int len);
  104.  
  105. struct module {
  106.     struct module *next;
  107.     const char *name;
  108.     int gpl_compatible;
  109.     struct symbol *unres;
  110.     int seen;
  111.     int skip;
  112.     int has_init;
  113.     int has_cleanup;
  114.     struct buffer dev_table_buf;
  115.     char **markers;
  116.     size_t nmarkers;
  117.     char         srcversion[25];
  118. };
  119.  
  120. struct elf_info {
  121.     unsigned long size;
  122.     Elf_Ehdr     *hdr;
  123.     Elf_Shdr     *sechdrs;
  124.     Elf_Sym      *symtab_start;
  125.     Elf_Sym      *symtab_stop;
  126.     Elf_Section  export_sec;
  127.     Elf_Section  export_unused_sec;
  128.     Elf_Section  export_gpl_sec;
  129.     Elf_Section  export_unused_gpl_sec;
  130.     Elf_Section  export_gpl_future_sec;
  131.     Elf_Section  markers_strings_sec;
  132.     const char   *strtab;
  133.     char         *modinfo;
  134.     unsigned int modinfo_len;
  135. };
  136.  
  137. /* file2alias.c */
  138. extern unsigned int cross_build;
  139. void handle_moddevtable(struct module *mod, struct elf_info *info,
  140.             Elf_Sym *sym, const char *symname);
  141. void add_moddevtable(struct buffer *buf, struct module *mod);
  142.  
  143. /* sumversion.c */
  144. void maybe_frob_rcs_version(const char *modfilename,
  145.                 char *version,
  146.                 void *modinfo,
  147.                 unsigned long modinfo_offset);
  148. void get_src_version(const char *modname, char sum[], unsigned sumlen);
  149.  
  150. /* from modpost.c */
  151. void *grab_file(const char *filename, unsigned long *size);
  152. char* get_next_line(unsigned long *pos, void *file, unsigned long size);
  153. void release_file(void *file, unsigned long size);
  154.  
  155. void fatal(const char *fmt, ...);
  156. void warn(const char *fmt, ...);
  157. void merror(const char *fmt, ...);
  158.